import { IPSBDScheme } from './ipsbdscheme';
import { IPSSysBDModule } from './ipssys-bdmodule';
import { IPSSysBDPart } from './ipssys-bdpart';
import { IPSSysBDTable } from './ipssys-bdtable';
import { IPSSysBDTableRS } from './ipssys-bdtable-rs';
import { IPSSysSFPlugin } from '../res/ipssys-sfplugin';
import { IPSSysModelGroup } from '../system/ipssys-model-group';
import { IPSSystemModule } from '../system/ipssystem-module';

/**
 *
 * @export
 * @interface IPSSysBDScheme
 */
export interface IPSSysBDScheme extends IPSBDScheme {
  /**
   * 大数据体系模块集合
   *
   * @type {IPSSysBDModule[]}
   */
  getAllPSSysBDModules(): IPSSysBDModule[] | null;

  /**
   * 大数据体系模块集合
   *
   * @type {IPSSysBDModule[]}
   */
  get allPSSysBDModules(): IPSSysBDModule[] | null;

  findPSSysBDModule(objKey: any): IPSSysBDModule | null;

  /**
   * 大数据体系分区集合
   *
   * @type {IPSSysBDPart[]}
   */
  getAllPSSysBDParts(): IPSSysBDPart[] | null;

  /**
   * 大数据体系分区集合
   *
   * @type {IPSSysBDPart[]}
   */
  get allPSSysBDParts(): IPSSysBDPart[] | null;

  findPSSysBDPart(objKey: any): IPSSysBDPart | null;

  /**
   * 大数据表关系集合
   *
   * @type {IPSSysBDTableRS[]}
   */
  getAllPSSysBDTableRSs(): IPSSysBDTableRS[] | null;

  /**
   * 大数据表关系集合
   *
   * @type {IPSSysBDTableRS[]}
   */
  get allPSSysBDTableRSs(): IPSSysBDTableRS[] | null;

  findPSSysBDTableRS(objKey: any): IPSSysBDTableRS | null;

  /**
   * 大数据表集合
   *
   * @type {IPSSysBDTable[]}
   */
  getAllPSSysBDTables(): IPSSysBDTable[] | null;

  /**
   * 大数据表集合
   *
   * @type {IPSSysBDTable[]}
   */
  get allPSSysBDTables(): IPSSysBDTable[] | null;

  findPSSysBDTable(objKey: any): IPSSysBDTable | null;

  /**
   * 认证客户端标识
   * @type {string}
   */
  authClientId: string;

  /**
   * 认证客户端密码
   * @type {string}
   */
  authClientSecret: string;

  /**
   * 认证模式
   * @description 值模式 [系统服务接口认证模式] {NONE：无认证、 AUTHORIZATION_CODE：授权码模式、 PASSWORD：密码模式、 CLIENT_CREDENTIALS：客户端模式、 IMPLICIT：简化模式、 USER：用户自定义、 USER2：用户自定义2 }
   * @type {( string | 'NONE' | 'AUTHORIZATION_CODE' | 'PASSWORD' | 'CLIENT_CREDENTIALS' | 'IMPLICIT' | 'USER' | 'USER2')}
   */
  authMode: string | 'NONE' | 'AUTHORIZATION_CODE' | 'PASSWORD' | 'CLIENT_CREDENTIALS' | 'IMPLICIT' | 'USER' | 'USER2';

  /**
   * 认证参数
   * @type {string}
   */
  authParam: string;

  /**
   * 认证参数2
   * @type {string}
   */
  authParam2: string;

  /**
   * 系统模型组
   *
   * @type {IPSSysModelGroup}
   */
  getPSSysModelGroup(): IPSSysModelGroup | null;

  /**
   * 系统模型组
   *
   * @type {IPSSysModelGroup}
   */
  get psSysModelGroup(): IPSSysModelGroup | null;

  /**
   * 系统模型组（必须存在）
   *
   * @type {IPSSysModelGroup}
   */
  getPSSysModelGroupMust(): IPSSysModelGroup;

  /**
   * 后台扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后台扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  get psSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后台扩展插件（必须存在）
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPluginMust(): IPSSysSFPlugin;

  /**
   * 系统模块
   *
   * @type {IPSSystemModule}
   */
  getPSSystemModule(): IPSSystemModule | null;

  /**
   * 系统模块
   *
   * @type {IPSSystemModule}
   */
  get psSystemModule(): IPSSystemModule | null;

  /**
   * 系统模块（必须存在）
   *
   * @type {IPSSystemModule}
   */
  getPSSystemModuleMust(): IPSSystemModule;

  /**
   * 服务参数
   * @type {string}
   */
  serviceParam: string;

  /**
   * 服务参数2
   * @type {string}
   */
  serviceParam2: string;

  /**
   * 服务路径
   * @type {string}
   */
  servicePath: string;

  /**
   * 默认大数据体系
   * @type {boolean}
   * @default false
   */
  defaultMode: boolean;
}
